package com.ruoyi.service.impl;

import java.util.List;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.mapper.CarUserCouponMapper;
import com.ruoyi.mapper.CarCouponMapper;
import com.ruoyi.domain.CarUserCoupon;
import com.ruoyi.domain.CarCoupon;
import com.ruoyi.service.ICarUserCouponService;

/**
 * 用户优惠券Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-01-27
 */
@Service
public class CarUserCouponServiceImpl implements ICarUserCouponService 
{
    @Autowired
    private CarUserCouponMapper carUserCouponMapper;
    
    @Autowired
    private CarCouponMapper carCouponMapper;

    /**
     * 查询用户优惠券
     * 
     * @param id 用户优惠券主键
     * @return 用户优惠券
     */
    @Override
    public CarUserCoupon selectCarUserCouponById(Long id)
    {
        return carUserCouponMapper.selectCarUserCouponById(id);
    }

    /**
     * 查询用户优惠券列表
     * 
     * @param carUserCoupon 用户优惠券
     * @return 用户优惠券集合
     */
    @Override
    public List<CarUserCoupon> selectCarUserCouponList(CarUserCoupon carUserCoupon)
    {
        return carUserCouponMapper.selectCarUserCouponList(carUserCoupon);
    }

    /**
     * 根据用户ID查询优惠券列表
     * 
     * @param userId 用户ID
     * @return 用户优惠券列表
     */
    @Override
    public List<CarUserCoupon> selectCarUserCouponByUserId(Long userId)
    {
        return carUserCouponMapper.selectCarUserCouponByUserId(userId);
    }

    /**
     * 新增用户优惠券
     * 
     * @param carUserCoupon 用户优惠券
     * @return 结果
     */
    @Override
    public int insertCarUserCoupon(CarUserCoupon carUserCoupon)
    {
        return carUserCouponMapper.insertCarUserCoupon(carUserCoupon);
    }

    /**
     * 修改用户优惠券
     * 
     * @param carUserCoupon 用户优惠券
     * @return 结果
     */
    @Override
    public int updateCarUserCoupon(CarUserCoupon carUserCoupon)
    {
        return carUserCouponMapper.updateCarUserCoupon(carUserCoupon);
    }

    /**
     * 批量删除用户优惠券
     * 
     * @param ids 需要删除的用户优惠券主键
     * @return 结果
     */
    @Override
    public int deleteCarUserCouponByIds(Long[] ids)
    {
        return carUserCouponMapper.deleteCarUserCouponByIds(ids);
    }

    /**
     * 删除用户优惠券信息
     * 
     * @param id 用户优惠券主键
     * @return 结果
     */
    @Override
    public int deleteCarUserCouponById(Long id)
    {
        return carUserCouponMapper.deleteCarUserCouponById(id);
    }

    /**
     * 使用优惠券
     * 
     * @param couponId 优惠券ID
     * @param userId 用户ID
     * @return 结果
     */
    @Override
    public int useCoupon(Long couponId, Long userId)
    {
        try {
            System.out.println("=== 开始使用优惠券 ===");
            System.out.println("优惠券ID: " + couponId);
            System.out.println("用户ID: " + userId);
            
            // 1. 查找用户优惠券记录
            CarUserCoupon query = new CarUserCoupon();
            query.setUserId(userId.intValue());
            query.setCouponId(couponId.intValue());
            List<CarUserCoupon> userCoupons = carUserCouponMapper.selectCarUserCouponList(query);
            
            System.out.println("查询到的用户优惠券记录数量: " + (userCoupons != null ? userCoupons.size() : 0));
            
            if (userCoupons == null || userCoupons.isEmpty()) {
                System.out.println("用户未领取该优惠券");
                return 0;
            }
            
            CarUserCoupon userCoupon = userCoupons.get(0);
            System.out.println("找到用户优惠券记录: ID=" + userCoupon.getId() + ", 状态=" + userCoupon.getStatus());
            
            // 2. 检查优惠券状态
            if (userCoupon.getStatus() != 0) {
                System.out.println("优惠券状态不可用: " + userCoupon.getStatus());
                return 0;
            }
            
            // 3. 检查优惠券是否过期
            CarCoupon coupon = carCouponMapper.selectCarCouponById(couponId.intValue());
            if (coupon != null && coupon.getEnd() != null) {
                Date now = new Date();
                if (now.after(coupon.getEnd())) {
                    System.out.println("优惠券已过期");
                    return 0;
                }
            }
            
            // 4. 更新用户优惠券状态为已使用
            CarUserCoupon updateCoupon = new CarUserCoupon();
            updateCoupon.setId(userCoupon.getId());
            updateCoupon.setStatus(1); // 1表示已使用
            updateCoupon.setUseTime(new Date());
            
            int updateResult = carUserCouponMapper.updateCarUserCoupon(updateCoupon);
            if (updateResult <= 0) {
                System.out.println("更新用户优惠券状态失败");
                return 0;
            }
            
            System.out.println("优惠券使用成功，状态已更新为已使用");
            return 1;
            
        } catch (Exception e) {
            System.err.println("使用优惠券异常: " + e.getMessage());
            e.printStackTrace();
            return 0;
        }
    }
}
